描述:

有一堆石子共有N个。A,B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。假设A,B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。

例如:

N = 3,K = 2。无论A如何拿,B都可以拿到最后1颗石子。

题解:

显然,如果N=K+1,那么由于一次最多只能取K个,所以,无论A拿走多少个,B都能够一次拿走剩余的物品,B取胜。因此我们发现了如何取胜的法则:如果,(X为任意自然数,Y≤K),那么A要拿走Y个物品,如果B拿走T(T≤K)个,那么A再拿走个,结果剩下个,以后保持这样的取法,那么A肯定获胜。总之,要保持给对手留下的倍数,就能最后获胜。

扩展:

这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。

代码:

include<stdio.h>
int main()
{
    long long N,K;
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%lld%lld",&N,&K);
        if(N % (K + 1))
            printf("A\n");
        else
            printf("B\n");
    }
}